package main

import (
	"flag"
	"fmt"
	"os"
)

var name string

func init() {
	/**
	flag包的StringVar接受四个参数：
	第一个：变量(这里指定是name)的地址
	第二个：指定该命令参数的名称
	第三个：指定在未追加改命令参数时的默认值
	第四个：该命令参数的简短说明
	 */
	flag.StringVar(&name, "name", "everyone", "The gretting object.")
}

/**
	使用方法：
	go run haolin/03_接受命令行参数.go  or go run haolin/03_接受命令行参数.go -name=aaa or go run haolin/03_接受命令行参数.go --help
	不输入命令参数name 会输出hello, everyone!，输入了命令参数name 会输出hello, aaa! 输入--help 会提示命令参数的名称，数据类型以及我们给这个命令参数设定的一个简短的介绍
 */

func main() {
	/**
	修改默认的命令源码文件的参数使用说明：
	在flag.Parse()对flag.Usage重新赋值,他只是修改第一行，默认是Usage of /var/folders/k0/525rc0k93jzg16_pg2lnyqq80000gn/T/go-build823721901/command-line-arguments/_obj/exe/03_接受命令行参数:
	修改后是Usage of Usage of：简短易懂
	/var/folders/k0/525rc0k93jzg16_pg2lnyqq80000gn/T/go-build823721901/command-line-arguments/_obj/exe/03_接受命令行参数 这个是go run 生成的临时可执行文件路径
	 */
	 flag.Usage = func() {
		 fmt.Fprintf(os.Stderr, "Usage of %s:\n", "Usage of")
		 flag.PrintDefaults()
	 }

	//真正解析命令行参数，并把它赋值给相应的变量，这里就是把命令行参数name的值赋值给name变量
	flag.Parse()
	fmt.Printf("hello, %s!\n", name)
}
